package com.hzlh.utils;


import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Random;
import java.util.regex.Pattern;

/**
 * @Description: 基础方法类，用于定义公用的方法，如时间转换、字符比对、订单号生成等
 * @Author: linker_zhang
 * @Date: Created in 2020/3/8 21:27
 * @Version:1.0.0
 */
public class StringUtil {
    private static long systemTimeMillis = 0L;
    private static long synchronizedNum = 0L;
    private static StringBuilder primaryUniqueKey;

    /**
     * 获得一个数据记录的主键Key
     *
     * @return 全局唯一主键
     */
    public synchronized static String orderNoCreate(String type) {
        primaryUniqueKey = new StringBuilder(25);
        primaryUniqueKey.append(type);
        long currentTimeMillis = System.currentTimeMillis();
        //同步判定
        if (currentTimeMillis > systemTimeMillis) {
            synchronizedNum = 0L;
            systemTimeMillis = currentTimeMillis;
        } else {
            synchronizedNum++;
        }
        primaryUniqueKey.append(systemTimeMillis).append(synchronizedNum);
        return primaryUniqueKey.toString();
    }

    /**
     * 返回对象的string值（调用string方法），若对象为null，使用默认值，若默认值为null，则返回空字符串("")
     *
     * @param o            需求返回字符串值得对象
     * @param defaultValue 当对象为空时，返回的默认值
     * @return
     */
    public static String getObjectStringValue(Object o, String defaultValue) {
        if (o == null) {
            if (defaultValue == null) {
                return "";
            } else {
                return defaultValue;
            }
        } else {
            return o.toString();
        }
    }

    /**
     * 当 o== null或者 o 的值 为 ""时，返回true,否则返回false
     *
     * @param o 判断对象
     * @return
     */
    public static boolean isEmpty(Object o) {
        if (o == null) {
            return true;
        } else {
            if ("".equals(o) || " ".equals(o) || "null".equals(o)) {
                return true;
            } else {
                return false;
            }
        }
    }

    public static boolean isEmptyNull(Object o) {
        if (o == null) {
            return true;
        } else {
            if ("null".equals(o)) {
                return true;
            } else {
                return false;
            }
        }
    }

    /**
     * @Description: 当前时间按指定格式进行字符串转换
     * @Param:
     * @Return:
     * @Author: linker_zhang
     * @Date: 2019/10/18 9:51
     * @Version: 2.0.0
     **/
    public static String getTimeString(String fromat) {
        SimpleDateFormat sdf = new SimpleDateFormat(fromat);
        Calendar calendar = Calendar.getInstance();
        return sdf.format(calendar.getTime());
    }

    /**
     * @Description: 获取指定变量日期转指定格式的字符串
     * @Param:
     * @Return:
     * @Author: linker_zhang
     * @Date: 2019/11/4 15:42
     * @Version: 2.0.8
     **/
    public static String getExpireTimeString(int type, int num, String fromat) {
        SimpleDateFormat sdf = new SimpleDateFormat(fromat);
        Calendar calendar = Calendar.getInstance();
        calendar.add(type, num);
        return sdf.format(calendar.getTime());
    }

}
